home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 17 / CU Amiga Magazine's Super CD-ROM 17 (1997)(EMAP Images)(GB)[!][issue 1997-12].iso / CUCD / Programming / MUI / MCC_TimeString / Developer / C / examples / TimeString-Demo.c
Encoding:
Text File  |  1997-10-07  |  19.8 KB  |  542 lines

  1. /*
  2. **
  3. ** Copyright © 1996-1997 Kai Hofmann. All rights reserved.
  4. ** Registered MUI custom class!
  5. **
  6. ** $VER: TimeString-Demo.c 12.4 (07.10.97)
  7. **
  8. */
  9.  
  10.  #define __MakeLib
  11.  
  12.  #include "system.h"
  13.  #include <mui/Time_mcc.h>
  14.  #include <mui/TimeString_mcc.h>
  15.  #include <proto/date.h>
  16.  #include <libraries/mui.h>
  17.  #include <proto/muimaster.h>
  18.  #include <exec/libraries.h>
  19.  #include <proto/exec.h>
  20.  #include <proto/intuition.h>
  21.  #include <clib/alib_protos.h>
  22.  
  23.  
  24.  #ifdef DEBUG
  25.    void kprintf(UBYTE *fmt,...);
  26.    #define debug(x)    kprintf(x "\n");
  27.  #else
  28.    #define debug(x)
  29.  #endif
  30.  
  31.  
  32.  #ifndef MAKE_ID
  33.    #define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
  34.  #endif
  35.  
  36.  
  37.  struct MUI_CustomClass *App_CC=NULL,*Win_CC=NULL,*Str_CC=NULL;
  38.  
  39.  
  40.  struct Library *MUIMasterBase;
  41.  struct Library *DateBase;
  42.  static Object *App;
  43.  
  44.  /* ------------------------------------------------------------------------ */
  45.  
  46.  static ULONG STACKARGS DoSuperNew(struct IClass *cl, Object *obj, ULONG tags, ...)
  47.   {
  48.    return(DoSuperMethod(cl,obj,OM_NEW,&tags,NULL));
  49.   }
  50.  
  51.  /* --- String ------------------------------------------------------------- */
  52.  
  53.  static ULONG Str_New(struct IClass *cl, Object *obj, struct opSet *msg)
  54.   {
  55.    obj = (Object *)DoSuperNew(cl,obj,
  56.                               MUIA_String_Format,    MUIV_String_Format_Left,
  57.                               MUIA_String_MaxLen,    30,
  58.                               MUIA_Frame,        MUIV_Frame_String,
  59.                               MUIA_Background,        MUII_TextBack,
  60.                               TAG_MORE, msg->ops_AttrList
  61.                              );
  62.    return((ULONG)obj);
  63.   }
  64.  
  65.  
  66.  static ULONG Str_DragQuery(struct IClass *cl, Object *obj, struct MUIP_DragQuery *msg)
  67.   {
  68.    /*struct Str_Data *data = (struct Str_Data *)INST_DATA(cl,obj);*/
  69.    /*ULONG result;*/
  70.  
  71.    if (msg->obj != obj)
  72.     {
  73.      ULONG Hour,Min,Sec;
  74.  
  75.      if (get(msg->obj,MUIA_Time_Hour,&Hour) && get(msg->obj,MUIA_Time_Minute,&Min) && get(msg->obj,MUIA_Time_Second,&Sec))
  76.       {
  77.        return(MUIV_DragQuery_Accept);
  78.       }
  79.     }
  80.    return(MUIV_DragQuery_Refuse);
  81.   }
  82.  
  83.  
  84.  static ULONG Str_DragDrop(struct IClass *cl, Object *obj, struct MUIP_DragDrop *msg)
  85.   {
  86.    /*struct Str_Data *data = (struct Str_Data *)INST_DATA(cl,obj);*/
  87.    /*ULONG result;*/
  88.    char str[9];
  89.    ULONG Hour,Min,Sec;
  90.  
  91.    /*result =*/ get(msg->obj,MUIA_Time_Hour,&Hour);
  92.    /*result =*/ get(msg->obj,MUIA_Time_Minute,&Min);
  93.    /*result =*/ get(msg->obj,MUIA_Time_Second,&Sec);
  94.    time_FormatTime("%H:%M:%S",time_Normal,2,FALSE,(unsigned short)Hour,(unsigned short)Min,(unsigned short)Sec,0,str);
  95.    /*result =*/ set(obj,MUIA_String_Contents,(ULONG)str);
  96.    return(0);
  97.   }
  98.  
  99.  
  100.  static ULONG SAVEDS_ASM Str_Dispatcher(REG(A0) struct IClass *cl, REG(A2) Object *obj, REG(A1) Msg msg)
  101.   {
  102.    switch (msg->MethodID)
  103.     {
  104.      case OM_NEW            : return(Str_New(cl,obj,(struct opSet *)msg));
  105.      case MUIM_DragQuery        : return(Str_DragQuery(cl,obj,(struct MUIP_DragQuery *)msg));
  106.      case MUIM_DragDrop            : return(Str_DragDrop(cl,obj,(struct MUIP_DragDrop *)msg));
  107.      default                : return(DoSuperMethodA(cl,obj,msg));
  108.     }
  109.   }
  110.  
  111.  /* --- Window ------------------------------------------------------------- */
  112.  
  113.  static ULONG Win_New(struct IClass *cl, Object *obj, struct opSet *msg)
  114.   {
  115.    Object *TimeString,*Hour,*Min,*Sec,*saveobj,*loadobj,*format,*MidnightSecs;
  116.  
  117.    obj = (Object *)DoSuperNew(cl,obj,
  118.                               MUIA_Window_ID,            MAKE_ID('D','E','M','O'),
  119.                               MUIA_Window_Title,        "TimeString-Demo",
  120.                               MUIA_Window_ScreenTitle,        "TimeString-Demo V12.4",
  121.                               MUIA_Window_RootObject,        VGroup,
  122.                                 MUIA_Group_SameWidth,        TRUE,
  123.                                 MUIA_Group_Child,        TimeString = TimeStringObject,
  124.                                   MUIA_Frame,            MUIV_Frame_String,
  125.                                   MUIA_FrameTitle,        "TimeString.mcc",
  126.                                   MUIA_Background,        MUII_TextBack,
  127.                                   MUIA_CycleChain,        1,
  128.                                   MUIA_Draggable,        TRUE,
  129.                                   /*MUIA_Dropable,        FALSE,*/
  130.                                   /*MUIA_Time_Hour,        17,*/
  131.                                   /*MUIA_Time_Minute,        0,*/
  132.                                   /*MUIA_Time_Second,        0,*/
  133.                                   /*MUIA_Time_ZoneMinute,    60,*/
  134.                                   /*MUIA_Time_DaylightSaving,    FALSE,*/
  135.                                   /*MUIA_Time_ChangeDay,    MUIV_Time_ChangeDay_SummerToWinter,*/
  136.                                   /*MUIA_TimeString_TimeFormat,    "%H:%M:%S",*/
  137.                                   MUIA_String_AdvanceOnCR,    TRUE,
  138.                                   MUIA_ObjectID,        1,
  139.                                 End,
  140.                                 MUIA_Group_Child,        HGroup,
  141.                                   MUIA_Group_SameHeight,    TRUE,
  142.                                   MUIA_Frame,            MUIV_Frame_Group,
  143.                                   MUIA_Group_Child,        RectangleObject,
  144.                                   End,
  145.                                   MUIA_Group_Child,        Hour = NumericbuttonObject,
  146.                                     MUIA_Numeric_Format,    "%lu",
  147.                                     MUIA_Numeric_Min,        0,
  148.                                     MUIA_Numeric_Max,        23,
  149.                                     MUIA_Numeric_Default,    0,
  150.                                     /*MUIA_Numeric_Value,    21,*/
  151.                                     MUIA_CycleChain,        1,
  152.                                     MUIA_Font,            MUIV_Font_Button,
  153.                                   End,
  154.                                   MUIA_Group_Child,        Min = NumericbuttonObject,
  155.                                     MUIA_Numeric_Format,    "%lu",
  156.                                     MUIA_Numeric_Min,        0,
  157.                                     MUIA_Numeric_Max,        59,
  158.                                     MUIA_Numeric_Default,    0,
  159.                                     /*MUIA_Numeric_Value,    0,*/
  160.                                     MUIA_CycleChain,        1,
  161.                                     MUIA_Font,            MUIV_Font_Button,
  162.                                   End,
  163.                                   MUIA_Group_Child,        Sec = NumericbuttonObject,
  164.                                     MUIA_Numeric_Format,    "%lu",
  165.                                     MUIA_Numeric_Min,        0,
  166.                                     MUIA_Numeric_Max,        59,
  167.                                     MUIA_Numeric_Default,    0,
  168.                                     /*MUIA_Numeric_Value,    0,*/
  169.                                     MUIA_CycleChain,        1,
  170.                                     MUIA_Font,            MUIV_Font_Button,
  171.                                   End,
  172.                                   MUIA_Group_Child,        RectangleObject,
  173.                                   End,
  174.                                 End,
  175.                                 MUIA_Group_Child,        HGroup,
  176.                                   MUIA_Frame,            MUIV_Frame_Group,
  177.                                   MUIA_Background,        MUII_GroupBack,
  178.                                   MUIA_Group_SameHeight,    TRUE,
  179.                                   MUIA_Group_Child,        RectangleObject,
  180.                                   End,
  181.                                   MUIA_Group_Child,        MidnightSecs = NumericbuttonObject,
  182.                                     MUIA_Numeric_Format,    "%lu",
  183.                                     MUIA_Numeric_Min,        0,
  184.                                     MUIA_Numeric_Max,        86399,
  185.                                     MUIA_Numeric_Default,    0,
  186.                                     /*MUIA_Numeric_Value,    75600,*/
  187.                                     MUIA_CycleChain,        1,
  188.                                     MUIA_Font,            MUIV_Font_Button,
  189.                                   End,
  190.                                   MUIA_Group_Child,        RectangleObject,
  191.                                   End,
  192.                                 End,
  193.                                 MUIA_Group_Child,        HGroup,
  194.                                   MUIA_Frame,            MUIV_Frame_Group,
  195.                                   MUIA_Background,        MUII_GroupBack,
  196.                                   MUIA_Group_SameHeight,    TRUE,
  197.                                   MUIA_Group_Child,        Label2("Format:"),
  198.                                   MUIA_Group_Child,        format = StringObject,
  199.                                     MUIA_Frame,            MUIV_Frame_String,
  200.                                     MUIA_Background,        MUII_TextBack,
  201.                                     MUIA_String_Accept,        "%:., qHQIpMSRTXrhms0123fvloujzc",
  202.                                     MUIA_String_Format,        MUIV_String_Format_Left,
  203.                                     MUIA_String_MaxLen,        25,
  204.                                     MUIA_CycleChain,        1,
  205.                                   End,
  206.                                 End,
  207.                                 MUIA_Group_Child,        HGroup,
  208.                                   MUIA_Frame,            MUIV_Frame_Group,
  209.                                   MUIA_Background,        MUII_GroupBack,
  210.                                   MUIA_Group_SameHeight,    TRUE,
  211.                                   MUIA_Group_Child,        Label2("Drop here:"),
  212.                                   MUIA_Group_Child,        NewObject(Str_CC->mcc_Class,NULL,
  213.                     MUIA_Dropable,        TRUE,
  214.                     MUIA_Draggable,        TRUE,
  215.                   End,
  216.                                 End,
  217.                                 MUIA_Group_Child,        HGroup,
  218.                                   MUIA_Frame,            MUIV_Frame_Group,
  219.                                   MUIA_Background,        MUII_GroupBack,
  220.                                   MUIA_Group_SameHeight,    TRUE,
  221.                                   MUIA_Group_Child,        loadobj = TextObject,
  222.                                     MUIA_Frame,            MUIV_Frame_Button,
  223.                                     MUIA_Background,        MUII_ButtonBack,
  224.                                     MUIA_Font,            MUIV_Font_Button,
  225.                                     MUIA_Text_PreParse,        "\33c",
  226.                                     MUIA_InputMode,        MUIV_InputMode_RelVerify,
  227.                                     MUIA_Text_Contents,        "Load",
  228.                                     MUIA_Text_HiChar,        'L',
  229.                                     MUIA_ControlChar,        'l',
  230.                                     MUIA_CycleChain,        1,
  231.                                   End,
  232.                                   MUIA_Group_Child,        saveobj = TextObject,
  233.                                     MUIA_Frame,            MUIV_Frame_Button,
  234.                                     MUIA_Background,        MUII_ButtonBack,
  235.                                     MUIA_Font,            MUIV_Font_Button,
  236.                                     MUIA_Text_PreParse,        "\33c",
  237.                                     MUIA_InputMode,        MUIV_InputMode_RelVerify,
  238.                                     MUIA_Text_Contents,        "Save",
  239.                                     MUIA_Text_HiChar,        'S',
  240.                                     MUIA_ControlChar,        's',
  241.                                     MUIA_CycleChain,        1,
  242.                                   End,
  243.                                 End,
  244.                               End,
  245.                               TAG_MORE, msg->ops_AttrList
  246.                              );
  247.    if (obj != NULL)
  248.     {
  249.      /*struct Win_Data *data = (struct Win_Data *)INST_DATA(cl,obj);*/
  250.      /*ULONG result;*/
  251.      ULONG hour,min,sec,secs;
  252.      STRPTR timeformat;
  253.  
  254.      /*result =*/ get(TimeString,MUIA_Time_Hour,&hour);
  255.      /*result =*/ get(TimeString,MUIA_Time_Minute,&min);
  256.      /*result =*/ get(TimeString,MUIA_Time_Second,&sec);
  257.      /*result =*/ get(TimeString,MUIA_Time_MidnightSecs,&secs);
  258.      /*result =*/ set(Hour,MUIA_Numeric_Value,hour);
  259.      /*result =*/ set(Min,MUIA_Numeric_Value,min);
  260.      /*result =*/ set(Sec,MUIA_Numeric_Value,sec);
  261.      /*result =*/ set(MidnightSecs,MUIA_Numeric_Value,secs);
  262.  
  263.      /*result =*/ get(TimeString,MUIA_TimeString_TimeFormat,&timeformat);
  264.      /*result =*/ set(format,MUIA_String_Contents,timeformat);
  265.  
  266.      /*result =*/ DoMethod(TimeString,MUIM_Notify,MUIA_Time_Hour,MUIV_EveryTime,Hour,3,MUIM_NoNotifySet,MUIA_Numeric_Value,MUIV_TriggerValue);
  267.      /*result =*/ DoMethod(TimeString,MUIM_Notify,MUIA_Time_Minute,MUIV_EveryTime,Min,3,MUIM_NoNotifySet,MUIA_Numeric_Value,MUIV_TriggerValue);
  268.      /*result =*/ DoMethod(TimeString,MUIM_Notify,MUIA_Time_Second,MUIV_EveryTime,Sec,3,MUIM_NoNotifySet,MUIA_Numeric_Value,MUIV_TriggerValue);
  269.      /*result =*/ DoMethod(TimeString,MUIM_Notify,MUIA_Time_MidnightSecs,MUIV_EveryTime,MidnightSecs,3,MUIM_NoNotifySet,MUIA_Numeric_Value,MUIV_TriggerValue);
  270.  
  271.      /*result =*/ DoMethod(Hour,MUIM_Notify,MUIA_Numeric_Value,MUIV_EveryTime,TimeString,3,MUIM_Set,MUIA_Time_Hour,MUIV_TriggerValue);
  272.      /*result =*/ DoMethod(Min,MUIM_Notify,MUIA_Numeric_Value,MUIV_EveryTime,TimeString,3,MUIM_Set,MUIA_Time_Minute,MUIV_TriggerValue);
  273.      /*result =*/ DoMethod(Sec,MUIM_Notify,MUIA_Numeric_Value,MUIV_EveryTime,TimeString,3,MUIM_Set,MUIA_Time_Second,MUIV_TriggerValue);
  274.      /*result =*/ DoMethod(MidnightSecs,MUIM_Notify,MUIA_Numeric_Value,MUIV_EveryTime,TimeString,3,MUIM_Set,MUIA_Time_MidnightSecs,MUIV_TriggerValue);
  275.  
  276.      /*result =*/ DoMethod(format,MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,TimeString,3,MUIM_Set,MUIA_TimeString_TimeFormat,MUIV_TriggerValue);
  277.  
  278.      /*result =*/ DoMethod(loadobj,MUIM_Notify,MUIA_Pressed,FALSE,MUIV_Notify_Application,2,MUIM_Application_Load,MUIV_Application_Load_ENV);
  279.      /*result =*/ DoMethod(saveobj,MUIM_Notify,MUIA_Pressed,FALSE,MUIV_Notify_Application,2,MUIM_Application_Save,MUIV_Application_Save_ENV);
  280.     }
  281.    return((ULONG)obj);
  282.   }
  283.  
  284.  
  285.  static ULONG SAVEDS_ASM Win_Dispatcher(REG(A0) struct IClass *cl, REG(A2) Object *obj, REG(A1) Msg msg)
  286.   {
  287.    switch (msg->MethodID)
  288.     {
  289.      case OM_NEW            : return(Win_New(cl,obj,(struct opSet *)msg));
  290.      default                : return(DoSuperMethodA(cl,obj,msg));
  291.     }
  292.   }
  293.  
  294.  /* --- Application -------------------------------------------------------- */
  295.  
  296.  static ULONG App_New(struct IClass *cl, Object *obj, struct opSet *msg)
  297.   {
  298.    Object *win1;
  299.  
  300.    obj = (Object *)DoSuperNew(cl,obj,
  301.                               MUIA_Application_Title,           "TimeString-Demo",
  302.                               MUIA_Application_Author,          "Kai Hofmann",
  303.                               MUIA_Application_Copyright,       "© 1996-1997 Kai Hofmann",
  304.                               MUIA_Application_Version,         "$VER: TimeString-Demo 12.4 " __AMIGADATE__,
  305.                               MUIA_Application_Description,     "TimeString demonstration program",
  306.                               MUIA_Application_Base,            "TSDEMO",
  307.                               MUIA_Application_SingleTask,      TRUE,
  308.                               MUIA_Application_Active,          TRUE,
  309.                               MUIA_Application_Window,        win1 = NewObject(Win_CC->mcc_Class,NULL,TAG_DONE),
  310.                               TAG_MORE, msg->ops_AttrList
  311.                              );
  312.    if (obj != NULL)
  313.     {
  314.      /*struct App_Data *data = (struct App_Data *)INST_DATA(cl,obj);*/
  315.      /*ULONG result;*/
  316.  
  317.      /*result =*/ DoMethod(win1,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,MUIV_Notify_Application,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  318.      set(win1,MUIA_Window_Open,TRUE);
  319.     }
  320.    return((ULONG)obj);
  321.   }
  322.  
  323.  
  324.  static ULONG SAVEDS_ASM App_Dispatcher(REG(A0) struct IClass *cl, REG(A2) Object *obj, REG(A1) Msg msg)
  325.   {
  326.    switch (msg->MethodID)
  327.     {
  328.      case OM_NEW            : return(App_New(cl,obj,(struct opSet *)msg));
  329.      default                : return(DoSuperMethodA(cl,obj,msg));
  330.     }
  331.   }
  332.  
  333.  /* ------------------------------------------------------------------------ */
  334.  
  335.  static void OpenReq(char *const str)
  336.   {
  337.    struct EasyStruct req =
  338.     {
  339.      sizeof(struct EasyStruct),
  340.      0,
  341.      "TimeString-Demo",
  342.      NULL,
  343.      "OK",
  344.     };
  345.  
  346.    req.es_TextFormat = str;
  347.    EasyRequest(NULL,&req,NULL,(ULONG)MUIMASTER_VMIN);
  348.   }
  349.  
  350.  /* ------------------------------------------------------------------------ */
  351.  
  352.  static int muiclasses_Init(void)
  353.   {
  354.    int retstat = RETURN_OK;
  355.  
  356.    App_CC = MUI_CreateCustomClass(NULL,MUIC_Application,NULL,0,App_Dispatcher);
  357.    if (App_CC == NULL)
  358.     {
  359.      OpenReq("Can not create 'App' privat custom class!");
  360.      retstat = RETURN_ERROR;
  361.     }
  362.    else
  363.     {
  364.      Win_CC = MUI_CreateCustomClass(NULL,MUIC_Window,NULL,0,Win_Dispatcher);
  365.      if (Win_CC == NULL)
  366.       {
  367.        OpenReq("Can not create 'Win' privat custom class!");
  368.        retstat = RETURN_ERROR;
  369.       }
  370.      else
  371.       {
  372.        Str_CC = MUI_CreateCustomClass(NULL,MUIC_String,NULL,0,Str_Dispatcher);
  373.        if (Str_CC == NULL)
  374.         {
  375.          OpenReq("Can not create 'Str' privat custom class!");
  376.          retstat = RETURN_ERROR;
  377.         }
  378.       }
  379.     }
  380.  
  381.    return(retstat);
  382.   }
  383.  
  384.  
  385.  static int muiclasses_Cleanup(void)
  386.   {
  387.    int retstat = RETURN_OK;
  388.  
  389.    if (Str_CC != NULL)
  390.     {
  391.      if (!MUI_DeleteCustomClass(Str_CC))
  392.       {
  393.        OpenReq("Can not delete 'Str' privat custom class!");
  394.        retstat = RETURN_ERROR;
  395.       }
  396.     }
  397.    if (Win_CC != NULL)
  398.     {
  399.      if (!MUI_DeleteCustomClass(Win_CC))
  400.       {
  401.        OpenReq("Can not delete 'Win' privat custom class!");
  402.        retstat = RETURN_ERROR;
  403.       }
  404.     }
  405.    if (App_CC != NULL)
  406.     {
  407.      if (!MUI_DeleteCustomClass(App_CC))
  408.       {
  409.        OpenReq("Can not delete 'App' privat custom class!");
  410.        retstat = RETURN_ERROR;
  411.       }
  412.     }
  413.  
  414.    return(retstat);
  415.   }
  416.  
  417.  /* ------------------------------------------------------------------------ */
  418.  
  419.  static int gui_Init(void)
  420.   {
  421.    int retstat;
  422.  
  423.    MUIMasterBase = OpenLibrary((UBYTE *)MUIMASTER_NAME,(unsigned long)MUIMASTER_VMIN);
  424.    if (MUIMasterBase != NULL)
  425.     {
  426.      retstat = muiclasses_Init();
  427.      if (retstat == RETURN_OK)
  428.       {
  429.        Object *ts;
  430.  
  431.        ts = MUI_NewObject(MUIC_TimeString,
  432.                           TAG_DONE
  433.                          );
  434.        if (ts != NULL)
  435.         {
  436.          MUI_DisposeObject(ts);
  437.          App = NewObject(App_CC->mcc_Class,NULL,TAG_DONE);
  438.          if (App == NULL)
  439.           {
  440.            /*retstat =*/ muiclasses_Cleanup();
  441.            CloseLibrary(MUIMasterBase);
  442.            OpenReq("Can not create application object!");
  443.            retstat = RETURN_FAIL;
  444.           }
  445.         }
  446.        else
  447.         {
  448.          /*retstat =*/ muiclasses_Cleanup();
  449.          CloseLibrary(MUIMasterBase);
  450.          OpenReq("Missing TimeString.mcc!");
  451.          retstat = RETURN_FAIL;
  452.         }
  453.       }
  454.      else
  455.       {
  456.        /*retstat =*/ muiclasses_Cleanup();
  457.        CloseLibrary(MUIMasterBase);
  458.       }
  459.     }
  460.    else
  461.     {
  462.      OpenReq("Can not open muimaster.library V%lu!");
  463.      retstat = RETURN_FAIL;
  464.     }
  465.    return(retstat);
  466.   }
  467.  
  468.  
  469.  static int gui_Cleanup(void)
  470.   {
  471.    int retstat = RETURN_OK;
  472.  
  473.    if (MUIMasterBase != NULL)
  474.     {
  475.      if (App != NULL)
  476.       {
  477.        MUI_DisposeObject(App);
  478.       }
  479.      retstat = muiclasses_Cleanup();
  480.      if (retstat == RETURN_OK)
  481.       {
  482.        CloseLibrary(MUIMasterBase);
  483.       }
  484.      else
  485.       {
  486.        OpenReq("Can not close muimaster.library!");
  487.        retstat = RETURN_FAIL;
  488.       }
  489.     }
  490.    return(retstat);
  491.   }
  492.  
  493.  
  494.  static void gui_MainLoop(void)
  495.   {
  496.    if (App != NULL)
  497.     {
  498.      ULONG signals=0;
  499.  
  500.      while (DoMethod(App,(unsigned long)MUIM_Application_NewInput,&signals) != MUIV_Application_ReturnID_Quit)
  501.       {
  502.        if (signals)
  503.         {
  504.          signals = Wait(signals | SIGBREAKF_CTRL_C);
  505.          if (signals & SIGBREAKF_CTRL_C)
  506.           {
  507.            /*ULONG result;*/
  508.  
  509.            /*result =*/ DoMethod(App,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  510.           }
  511.         }
  512.       }
  513.     }
  514.   }
  515.  
  516.  /* ------------------------------------------------------------------------ */
  517.  
  518.  void main(void)
  519.   {
  520.    DateBase = OpenLibrary(DATE_NAME,33);
  521.    if (DateBase != NULL)
  522.     {
  523.      if (((DateBase->lib_Version > 33)) || ((DateBase->lib_Version == 33) && (DateBase->lib_Revision >= 280)))
  524.       {
  525.        if (gui_Init() == RETURN_OK)
  526.         {
  527.          gui_MainLoop();
  528.          /*result =*/ gui_Cleanup();
  529.         }
  530.       }
  531.      else
  532.       {
  533.        OpenReq("Can not open date.library V33.280");
  534.       }
  535.      CloseLibrary(DateBase);
  536.     }
  537.    else
  538.     {
  539.      OpenReq("Can not open date.library V33");
  540.     }
  541.   }
  542.